Micron Document
<!DOCTYPE html>
<html class="client-nojs vector-feature-night-mode-disabled vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-sticky-header-enabled" lang="en" dir="ltr"><head>
<meta charset="UTF-8">
<title>Insert (SQL)</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="canonical" href="https://en.wikipedia.org/wiki/Insert_(SQL)"> <link href="./mw/ext.cite.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/ext.pygments.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/user.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link rel="stylesheet" type="text/css" href="./mw/site.styles.css">
<link rel="stylesheet" type="text/css" href="./mw/noscript.css">
<link rel="stylesheet" type="text/css" href="./footer.css">
<link rel="stylesheet" type="text/css" href="./vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-Insert_SQL rootpage-Insert_SQL skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading">
<span id="openzim-page-title" class="mw-page-title-main"><span class="mw-page-title-main">Insert (SQL)</span></span>
</h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="en" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="en" dir="ltr">
<p>An <a href="SQL" title="SQL">SQL</a> <b>INSERT</b> statement adds one or more records to any single <a href="Table_(database)" title="Table (database)">table</a> in a <a href="Relational_database" title="Relational database">relational database</a>.
</p>
<meta property="mw:PageProp/toc">
<div class="mw-heading mw-heading2"><h2 id="Basic_form">Basic form</h2></div>
<p>Insert statements have the following form:
</p>
<style data-mw-deduplicate="TemplateStyles:r1195917819">
/* start https://en.wikipedia.org/ */


.mw-parser-output .pre-borderless{border:none}


/* end https://en.wikipedia.org/ */
</style><pre class="pre">INSERT INTO <i>table</i> (<i>column1</i> [, <i>column2</i>, <i>column3</i> ... ]) VALUES (<i>value1</i> [, <i>value2</i>, <i>value3</i> ... ])</pre>
<p>The number of <a href="Column_(database)" title="Column (database)">columns</a> and values must be the same. If a column is not specified, the default value for the column is used. The values specified (or implied) by the <style data-mw-deduplicate="TemplateStyles:r886049734">
/* start https://en.wikipedia.org/ */


.mw-parser-output .monospaced{font-family:monospace,monospace}


/* end https://en.wikipedia.org/ */
</style><span class="monospaced">INSERT</span> statement must satisfy all the applicable constraints (such as <a href="Primary_key" title="Primary key">primary keys</a>, <a href="Check_Constraint" class="mw-redirect" title="Check Constraint"><span class="monospaced">CHECK</span> constraints</a>, and <span class="monospaced"><a href="Null_(SQL)" title="Null (SQL)">NOT NULL</a></span> constraints). If a syntax error occurs or if any constraints are violated, the new row is not added to the table and an error returned instead.
</p><p>Example:
</p>
<div class="mw-highlight mw-highlight-lang-sql mw-content-ltr" dir="ltr"><pre><span class="k">INSERT</span><span class="w"> </span><span class="k">INTO</span><span class="w"> </span><span class="n">phone_book</span><span class="w"> </span><span class="p">(</span><span class="n">name</span><span class="p">,</span><span class="w"> </span><span class="nb">number</span><span class="p">)</span><span class="w"> </span><span class="k">VALUES</span><span class="w"> </span><span class="p">(</span><span class="s1">'John Doe'</span><span class="p">,</span><span class="w"> </span><span class="s1">'555-1212'</span><span class="p">);</span>
</pre></div>
<p>Shorthand may also be used, taking advantage of the order of the columns when the table was created. It is not required to specify all columns in the table since any other columns will take their default value or remain <a href="Null_(SQL)" title="Null (SQL)">null</a>:
</p>
<pre class="pre">INSERT INTO <i>table</i> VALUES (<i>value1</i>, [<i>value2</i>, ... ])</pre>
<p>Example for inserting data into 2 columns in the phone_book table and ignoring any other columns which may be after the first 2 in the table.
</p>
<div class="mw-highlight mw-highlight-lang-sql mw-content-ltr" dir="ltr"><pre><span class="k">INSERT</span><span class="w"> </span><span class="k">INTO</span><span class="w"> </span><span class="n">phone_book</span><span class="w"> </span><span class="k">VALUES</span><span class="w"> </span><span class="p">(</span><span class="s1">'John Doe'</span><span class="p">,</span><span class="w"> </span><span class="s1">'555-1212'</span><span class="p">);</span>
</pre></div>
<div class="mw-heading mw-heading2"><h2 id="Advanced_forms">Advanced forms</h2></div>
<div class="mw-heading mw-heading3"><h3 id="Multirow_inserts">Multirow inserts</h3></div>
<p>A SQL feature (since <a href="SQL-92" title="SQL-92">SQL-92</a>) is the use of <i>row value constructors</i> to insert multiple rows at a time in a single SQL statement:
</p>
<div class="mw-highlight mw-highlight-lang-sql mw-content-ltr" dir="ltr"><pre><span class="k">INSERT</span><span class="w"> </span><span class="k">INTO</span><span class="w"> </span><span class="n">tablename</span><span class="w"> </span><span class="p">(</span><span class="k">column</span><span class="o">-</span><span class="n">a</span><span class="p">,</span><span class="w"> </span><span class="p">[</span><span class="k">column</span><span class="o">-</span><span class="n">b</span><span class="p">,</span><span class="w"> </span><span class="p">...])</span>
<span class="k">VALUES</span><span class="w"> </span><span class="p">(</span><span class="s1">'value-1a'</span><span class="p">,</span><span class="w"> </span><span class="p">[</span><span class="s1">'value-1b'</span><span class="p">,</span><span class="w"> </span><span class="p">...]),</span>
<span class="w"> </span><span class="p">(</span><span class="s1">'value-2a'</span><span class="p">,</span><span class="w"> </span><span class="p">[</span><span class="s1">'value-2b'</span><span class="p">,</span><span class="w"> </span><span class="p">...]),</span>
<span class="w"> </span><span class="p">...</span>
</pre></div>
<p>This feature is supported by <a href="IBM_Db2" title="IBM Db2">IBM Db2</a>, <a href="Microsoft_SQL_Server" title="Microsoft SQL Server">SQL Server</a> (since version 10.0 - i.e. 2008), <a href="PostgreSQL" title="PostgreSQL">PostgreSQL</a> (since version 8.2), <a href="MySQL" title="MySQL">MySQL</a>, <a href="SQLite" title="SQLite">SQLite</a> (since version 3.7.11) and <a href="H2_(DBMS)" class="mw-redirect" title="H2 (DBMS)">H2</a>.
</p><p>Example (assuming that 'name' and 'number' are the only columns in the 'phone_book' table):
</p>
<div class="mw-highlight mw-highlight-lang-sql mw-content-ltr" dir="ltr"><pre><span class="k">INSERT</span><span class="w"> </span><span class="k">INTO</span><span class="w"> </span><span class="n">phone_book</span><span class="w"> </span><span class="k">VALUES</span><span class="w"> </span><span class="p">(</span><span class="s1">'John Doe'</span><span class="p">,</span><span class="w"> </span><span class="s1">'555-1212'</span><span class="p">),</span><span class="w"> </span><span class="p">(</span><span class="s1">'Peter Doe'</span><span class="p">,</span><span class="w"> </span><span class="s1">'555-2323'</span><span class="p">);</span>
</pre></div>
<p>which may be seen as a shorthand for the two statements
</p>
<div class="mw-highlight mw-highlight-lang-sql mw-content-ltr" dir="ltr"><pre><span class="k">INSERT</span><span class="w"> </span><span class="k">INTO</span><span class="w"> </span><span class="n">phone_book</span><span class="w"> </span><span class="k">VALUES</span><span class="w"> </span><span class="p">(</span><span class="s1">'John Doe'</span><span class="p">,</span><span class="w"> </span><span class="s1">'555-1212'</span><span class="p">);</span>
<span class="k">INSERT</span><span class="w"> </span><span class="k">INTO</span><span class="w"> </span><span class="n">phone_book</span><span class="w"> </span><span class="k">VALUES</span><span class="w"> </span><span class="p">(</span><span class="s1">'Peter Doe'</span><span class="p">,</span><span class="w"> </span><span class="s1">'555-2323'</span><span class="p">);</span>
</pre></div>
<p>Note that the two separate statements may have different semantics (especially with respect to statement <a href="Database_trigger" title="Database trigger">triggers</a>) and may not provide the same performance as a single multi-row insert.
</p><p>To insert multiple rows in MS SQL you can use such a construction:
</p>
<div class="mw-highlight mw-highlight-lang-tsql mw-content-ltr" dir="ltr"><pre><span class="k">INSERT</span><span class="w"> </span><span class="k">INTO</span><span class="w"> </span><span class="n">phone_book</span>
<span class="k">SELECT</span><span class="w"> </span><span class="s1">'John Doe'</span><span class="p">,</span><span class="w"> </span><span class="s1">'555-1212'</span>
<span class="ow">UNION</span><span class="w"> </span><span class="ow">ALL</span>
<span class="k">SELECT</span><span class="w"> </span><span class="s1">'Peter Doe'</span><span class="p">,</span><span class="w"> </span><span class="s1">'555-2323'</span><span class="p">;</span>
</pre></div>
<p>Note that this is not a valid SQL statement according to the SQL standard (<a href="SQL%3A2003" title="SQL:2003">SQL:2003</a>) due to the incomplete subselect clause.
</p><p>To do the same in Oracle use the <a href="DUAL_table" title="DUAL table">DUAL table</a>, which always consists of a single row only:
</p>
<div class="mw-highlight mw-highlight-lang-sql mw-content-ltr" dir="ltr"><pre><span class="k">INSERT</span><span class="w"> </span><span class="k">INTO</span><span class="w"> </span><span class="n">phone_book</span>
<span class="k">SELECT</span><span class="w"> </span><span class="s1">'John Doe'</span><span class="p">,</span><span class="w"> </span><span class="s1">'555-1212'</span><span class="w"> </span><span class="k">FROM</span><span class="w"> </span><span class="n">DUAL</span>
<span class="k">UNION</span><span class="w"> </span><span class="k">ALL</span>
<span class="k">SELECT</span><span class="w"> </span><span class="s1">'Peter Doe'</span><span class="p">,</span><span class="s1">'555-2323'</span><span class="w"> </span><span class="k">FROM</span><span class="w"> </span><span class="n">DUAL</span>
</pre></div>
<p>A standard-conforming implementation of this logic shows the following example, or as shown above:
</p>
<div class="mw-highlight mw-highlight-lang-sql mw-content-ltr" dir="ltr"><pre><span class="k">INSERT</span><span class="w"> </span><span class="k">INTO</span><span class="w"> </span><span class="n">phone_book</span>
<span class="k">SELECT</span><span class="w"> </span><span class="s1">'John Doe'</span><span class="p">,</span><span class="w"> </span><span class="s1">'555-1212'</span><span class="w"> </span><span class="k">FROM</span><span class="w"> </span><span class="k">LATERAL</span><span class="w"> </span><span class="p">(</span><span class="w"> </span><span class="k">VALUES</span><span class="w"> </span><span class="p">(</span><span class="mi">1</span><span class="p">)</span><span class="w"> </span><span class="p">)</span><span class="w"> </span><span class="k">AS</span><span class="w"> </span><span class="n">t</span><span class="p">(</span><span class="k">c</span><span class="p">)</span>
<span class="k">UNION</span><span class="w"> </span><span class="k">ALL</span>
<span class="k">SELECT</span><span class="w"> </span><span class="s1">'Peter Doe'</span><span class="p">,</span><span class="s1">'555-2323'</span><span class="w"> </span><span class="k">FROM</span><span class="w"> </span><span class="k">LATERAL</span><span class="w"> </span><span class="p">(</span><span class="w"> </span><span class="k">VALUES</span><span class="w"> </span><span class="p">(</span><span class="mi">1</span><span class="p">)</span><span class="w"> </span><span class="p">)</span><span class="w"> </span><span class="k">AS</span><span class="w"> </span><span class="n">t</span><span class="p">(</span><span class="k">c</span><span class="p">)</span>
</pre></div>
<p>Oracle PL/SQL supports the <span class="monospaced">INSERT ALL</span> statement, where multiple insert statements are terminated by a <span class="monospaced">SELECT</span>:<sup id="cite_ref-1" class="reference"><a href="#cite_note-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-highlight mw-highlight-lang-sql mw-content-ltr" dir="ltr"><pre><span class="k">INSERT</span><span class="w"> </span><span class="k">ALL</span>
<span class="k">INTO</span><span class="w"> </span><span class="n">phone_book</span><span class="w"> </span><span class="k">VALUES</span><span class="w"> </span><span class="p">(</span><span class="s1">'John Doe'</span><span class="p">,</span><span class="w"> </span><span class="s1">'555-1212'</span><span class="p">)</span>
<span class="k">INTO</span><span class="w"> </span><span class="n">phone_book</span><span class="w"> </span><span class="k">VALUES</span><span class="w"> </span><span class="p">(</span><span class="s1">'Peter Doe'</span><span class="p">,</span><span class="w"> </span><span class="s1">'555-2323'</span><span class="p">)</span>
<span class="k">SELECT</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="k">FROM</span><span class="w"> </span><span class="n">DUAL</span><span class="p">;</span>
</pre></div>
<p>In <a href="Firebird_(database_server)" title="Firebird (database server)">Firebird</a> inserting multiple rows can be achieved like this:
</p>
<div class="mw-highlight mw-highlight-lang-sql mw-content-ltr" dir="ltr"><pre><span class="k">INSERT</span><span class="w"> </span><span class="k">INTO</span><span class="w"> </span><span class="n">phone_book</span><span class="w"> </span><span class="p">(</span><span class="n">name</span><span class="p">,</span><span class="w"> </span><span class="nb">number</span><span class="p">)</span>
<span class="k">SELECT</span><span class="w"> </span><span class="s1">'John Doe'</span><span class="p">,</span><span class="w"> </span><span class="s1">'555-1212'</span><span class="w"> </span><span class="k">FROM</span><span class="w"> </span><span class="n">RDB$DATABASE</span>
<span class="k">UNION</span><span class="w"> </span><span class="k">ALL</span>
<span class="k">SELECT</span><span class="w"> </span><span class="s1">'Peter Doe'</span><span class="p">,</span><span class="w"> </span><span class="s1">'555-2323'</span><span class="w"> </span><span class="k">FROM</span><span class="w"> </span><span class="n">RDB$DATABASE</span><span class="p">;</span>
</pre></div>
<p>Firebird, however, restricts the number of rows than can be inserted in this way, since there is a limit to the number of contexts that can be used in a single query.
</p>
<div class="mw-heading mw-heading3"><h3 id="Copying_rows_from_other_tables">Copying rows from other tables</h3></div>
<p>An <span class="monospaced">INSERT</span> statement can also be used to retrieve data from other tables, modify it if necessary and insert it directly into the table. All this is done in a single SQL statement that does not involve any intermediary processing in the client application. A subselect is used instead of the <span class="monospaced">VALUES</span> clause. The subselect can contain joins, function calls, and it can even query the same table into which the data is inserted. Logically, the select is evaluated before the actual insert operation is started. An example is given below.
</p>
<div class="mw-highlight mw-highlight-lang-sql mw-content-ltr" dir="ltr"><pre><span class="k">INSERT</span><span class="w"> </span><span class="k">INTO</span><span class="w"> </span><span class="n">phone_book2</span>
<span class="k">SELECT</span><span class="w"> </span><span class="o">*</span>
<span class="k">FROM</span><span class="w"> </span><span class="n">phone_book</span>
<span class="k">WHERE</span><span class="w"> </span><span class="n">name</span><span class="w"> </span><span class="k">IN</span><span class="w"> </span><span class="p">(</span><span class="s1">'John Doe'</span><span class="p">,</span><span class="w"> </span><span class="s1">'Peter Doe'</span><span class="p">)</span>
</pre></div>
<p>A variation is needed when some of the data from the source table is being inserted into the new table, but not the whole record. (Or when the tables' <a href="Database_schema" title="Database schema">schemas</a> are not the same.)
</p>
<div class="mw-highlight mw-highlight-lang-sql mw-content-ltr" dir="ltr"><pre><span class="k">INSERT</span><span class="w"> </span><span class="k">INTO</span><span class="w"> </span><span class="n">phone_book2</span><span class="w"> </span><span class="p">(</span><span class="n">name</span><span class="p">,</span><span class="w"> </span><span class="nb">number</span><span class="p">)</span>
<span class="k">SELECT</span><span class="w"> </span><span class="n">name</span><span class="p">,</span><span class="w"> </span><span class="nb">number</span>
<span class="k">FROM</span><span class="w"> </span><span class="n">phone_book</span>
<span class="k">WHERE</span><span class="w"> </span><span class="n">name</span><span class="w"> </span><span class="k">IN</span><span class="w"> </span><span class="p">(</span><span class="s1">'John Doe'</span><span class="p">,</span><span class="w"> </span><span class="s1">'Peter Doe'</span><span class="p">)</span>
</pre></div>
<p>The <span class="monospaced">SELECT</span> statement produces a (temporary) table, and the schema of that temporary table must match with the schema of the table where the data is inserted into.
</p>
<div class="mw-heading mw-heading2"><h2 id="Default_Values">Default Values</h2></div>
<p>It is possible to insert a new row without specifying any data, using default values for all columns.
However, some databases reject the statement if no data is given, such as Microsoft SQL Server, and in this case the <span class="monospaced">DEFAULT</span> keyword can be used.
</p>
<div class="mw-highlight mw-highlight-lang-sql mw-content-ltr" dir="ltr"><pre><span class="k">INSERT</span><span class="w"> </span><span class="k">INTO</span><span class="w"> </span><span class="n">phone_book</span>
<span class="k">VALUES</span><span class="w"> </span><span class="p">(</span><span class="w"> </span><span class="k">DEFAULT</span><span class="w"> </span><span class="p">)</span>
</pre></div>
<p>Sometimes databases also support alternative syntax for this; for example, MySQL allows omitting the <span class="monospaced">DEFAULT</span> keyword, and T-SQL can use <span class="monospaced">DEFAULT VALUES</span> instead of <span class="monospaced">VALUES(DEFAULT)</span>.
The <span class="monospaced">DEFAULT</span> keyword can also be used in normal insertion to explicitly fill a column using that column's default value:
</p>
<div class="mw-highlight mw-highlight-lang-sql mw-content-ltr" dir="ltr"><pre><span class="k">INSERT</span><span class="w"> </span><span class="k">INTO</span><span class="w"> </span><span class="n">phone_book</span><span class="w"> </span><span class="k">VALUES</span><span class="w"> </span><span class="p">(</span><span class="w"> </span><span class="k">DEFAULT</span><span class="p">,</span><span class="w"> </span><span class="s1">'555-1212'</span><span class="w"> </span><span class="p">)</span>
</pre></div>
<p>What happens when a column does not specify a default value is database dependent.
For example, MySQL and SQLite will fill in with a blank value (except when in strict mode), while many other databases will reject the statement.
</p>
<div class="mw-heading mw-heading2"><h2 id="Retrieving_the_key">Retrieving the key</h2></div>
<p>Database designers that use a <a href="Surrogate_key" title="Surrogate key">surrogate key</a> as the primary key for every table will run into the occasional scenario where they need to automatically retrieve the database-generated primary key from an SQL <span class="monospaced">INSERT</span> statement for use in other SQL statements. Most systems do not allow SQL <span class="monospaced">INSERT</span> statements to return row data. Therefore, it becomes necessary to implement a workaround in such scenarios. Common implementations include:
</p>
<ul><li>Using a database-specific <a href="Stored_procedure" title="Stored procedure">stored procedure</a> that generates the surrogate key, performs the <span class="monospaced">INSERT</span> operation, and finally returns the generated key. For example, in Microsoft SQL Server, the key is retrieved via the <span class="monospaced">SCOPE_IDENTITY()</span> special function, while in SQLite the function is named <span class="monospaced">last_insert_rowid()</span>.</li>
<li>Using a database-specific <span class="monospaced"><a href="Select_(SQL)" title="Select (SQL)">SELECT</a></span> statement on a temporary table containing last inserted row(s). Db2 implements this feature in the following way:
<dl><dd><div class="mw-highlight mw-highlight-lang-sql mw-content-ltr" dir="ltr"><pre><span class="k">SELECT</span><span class="w"> </span><span class="o">*</span>
<span class="k">FROM</span><span class="w"> </span><span class="k">NEW</span><span class="w"> </span><span class="k">TABLE</span><span class="w"> </span><span class="p">(</span>
<span class="w"> </span><span class="k">INSERT</span><span class="w"> </span><span class="k">INTO</span><span class="w"> </span><span class="n">phone_book</span>
<span class="w"> </span><span class="k">VALUES</span><span class="w"> </span><span class="p">(</span><span class="w"> </span><span class="s1">'Peter Doe'</span><span class="p">,</span><span class="s1">'555-2323'</span><span class="w"> </span><span class="p">)</span>
<span class="p">)</span><span class="w"> </span><span class="k">AS</span><span class="w"> </span><span class="n">t</span>
</pre></div></dd></dl>
<ul><li>Db2 for <a href="Z/OS" title="Z/OS">z/OS</a> implements this feature in the following way.
<dl><dd><div class="mw-highlight mw-highlight-lang-sql mw-content-ltr" dir="ltr"><pre><span class="k">SELECT</span><span class="w"> </span><span class="n">EMPNO</span><span class="p">,</span><span class="w"> </span><span class="n">HIRETYPE</span><span class="p">,</span><span class="w"> </span><span class="n">HIREDATE</span>
<span class="k">FROM</span><span class="w"> </span><span class="k">FINAL</span><span class="w"> </span><span class="k">TABLE</span><span class="w"> </span><span class="p">(</span>
<span class="w"> </span><span class="k">INSERT</span><span class="w"> </span><span class="k">INTO</span><span class="w"> </span><span class="n">EMPSAMP</span><span class="w"> </span><span class="p">(</span><span class="n">NAME</span><span class="p">,</span><span class="w"> </span><span class="n">SALARY</span><span class="p">,</span><span class="w"> </span><span class="n">DEPTNO</span><span class="p">,</span><span class="w"> </span><span class="k">LEVEL</span><span class="p">)</span>
<span class="w"> </span><span class="k">VALUES</span><span class="p">(</span><span class="s1">'Mary Smith'</span><span class="p">,</span><span class="w"> </span><span class="mi">35000</span><span class="p">.</span><span class="mi">00</span><span class="p">,</span><span class="w"> </span><span class="mi">11</span><span class="p">,</span><span class="w"> </span><span class="s1">'Associate'</span><span class="p">)</span>
<span class="p">);</span>
</pre></div></dd></dl></li></ul></li>
<li>Using a <span class="monospaced"><a href="Select_(SQL)" title="Select (SQL)">SELECT</a></span> statement after the <span class="monospaced">INSERT</span> statement with a database-specific function that returns the generated primary key for the most recently inserted row. For example, <span class="monospaced">LAST_INSERT_ID()</span> for <a href="MySQL" title="MySQL">MySQL</a>.</li>
<li>Using a unique combination of elements from the original SQL <span class="monospaced">INSERT</span> in a subsequent <span class="monospaced">SELECT</span> statement.</li>
<li>Using a <a href="GUID" class="mw-redirect" title="GUID">GUID</a> in the SQL <span class="monospaced">INSERT</span> statement and retrieving it in a <span class="monospaced">SELECT</span> statement.</li>
<li>Using the <span class="monospaced">OUTPUT</span> clause in the SQL <span class="monospaced">INSERT</span> statement for MS-SQL Server 2005 and MS-SQL Server 2008.</li>
<li>Using an <span class="monospaced">INSERT</span> statement with <span class="monospaced">RETURNING</span> clause for <a href="Oracle_database" class="mw-redirect" title="Oracle database">Oracle</a>.
<dl><dd><div class="mw-highlight mw-highlight-lang-postgres mw-content-ltr" dir="ltr"><pre><span class="k">INSERT</span><span class="w"> </span><span class="k">INTO</span><span class="w"> </span><span class="n">phone_book</span><span class="w"> </span><span class="k">VALUES</span><span class="w"> </span><span class="p">(</span><span class="w"> </span><span class="s1">'Peter Doe'</span><span class="p">,</span><span class="s1">'555-2323'</span><span class="w"> </span><span class="p">)</span>
<span class="k">RETURNING</span><span class="w"> </span><span class="n">phone_book_id</span><span class="w"> </span><span class="k">INTO</span><span class="w"> </span><span class="n">v_pb_id</span>
</pre></div></dd></dl></li>
<li>Using an <span class="monospaced">INSERT</span> statement with <span class="monospaced">RETURNING</span> clause for <a href="PostgreSQL" title="PostgreSQL">PostgreSQL</a> (since 8.2). The returned list is identical to the result of a <span class="monospaced">INSERT</span>.
<ul><li><a href="Firebird_(database_server)" title="Firebird (database server)">Firebird</a> has the same syntax in Data Modification Language statements (DSQL); the statement may add at most one row.<sup id="cite_ref-2" class="reference"><a href="#cite_note-2"><span class="cite-bracket">[</span>2<span class="cite-bracket">]</span></a></sup> In stored procedures, triggers and execution blocks (PSQL) the aforementioned Oracle syntax is used.<sup id="cite_ref-3" class="reference"><a href="#cite_note-3"><span class="cite-bracket">[</span>3<span class="cite-bracket">]</span></a></sup>
<dl><dd><div class="mw-highlight mw-highlight-lang-postgres mw-content-ltr" dir="ltr"><pre><span class="k">INSERT</span><span class="w"> </span><span class="k">INTO</span><span class="w"> </span><span class="n">phone_book</span><span class="w"> </span><span class="k">VALUES</span><span class="w"> </span><span class="p">(</span><span class="w"> </span><span class="s1">'Peter Doe'</span><span class="p">,</span><span class="s1">'555-2323'</span><span class="w"> </span><span class="p">)</span>
<span class="k">RETURNING</span><span class="w"> </span><span class="n">phone_book_id</span>
</pre></div></dd></dl></li></ul></li>
<li>Using the <span class="monospaced">IDENTITY()</span> function in <a href="H2_(DBMS)" class="mw-redirect" title="H2 (DBMS)">H2</a> returns the last identity inserted.
<dl><dd><div class="mw-highlight mw-highlight-lang-sql mw-content-ltr" dir="ltr"><pre><span class="k">SELECT</span><span class="w"> </span><span class="k">IDENTITY</span><span class="p">();</span>
</pre></div></dd></dl></li></ul>
<div class="mw-heading mw-heading2"><h2 id="Triggers">Triggers</h2></div>
<p>If <a href="Database_trigger" title="Database trigger">triggers</a> are defined on the table on which the <span class="monospaced">INSERT</span> statement operates, those triggers are evaluated in the context of the operation. <span class="monospaced">BEFORE INSERT</span> triggers allow the modification of the values that shall be inserted into the table. <span class="monospaced">AFTER INSERT</span> triggers cannot modify the data anymore, but can be used to initiate actions on other tables, for example, to implement auditing mechanism.
</p>
<div class="mw-heading mw-heading2"><h2 id="References">References</h2></div>
<style data-mw-deduplicate="TemplateStyles:r1239543626">
/* start https://en.wikipedia.org/ */


.mw-parser-output .reflist{margin-bottom:0.5em;list-style-type:decimal}@media screen{.mw-parser-output .reflist{font-size:90%}}.mw-parser-output .reflist .references{font-size:100%;margin-bottom:0;list-style-type:inherit}.mw-parser-output .reflist-columns-2{column-width:30em}.mw-parser-output .reflist-columns-3{column-width:25em}.mw-parser-output .reflist-columns{margin-top:0.3em}.mw-parser-output .reflist-columns ol{margin-top:0}.mw-parser-output .reflist-columns li{page-break-inside:avoid;break-inside:avoid-column}.mw-parser-output .reflist-upper-alpha{list-style-type:upper-alpha}.mw-parser-output .reflist-upper-roman{list-style-type:upper-roman}.mw-parser-output .reflist-lower-alpha{list-style-type:lower-alpha}.mw-parser-output .reflist-lower-greek{list-style-type:lower-greek}.mw-parser-output .reflist-lower-roman{list-style-type:lower-roman}


/* end https://en.wikipedia.org/ */
</style><div class="reflist">
<div class="mw-references-wrap"><ol class="references">
<li id="cite_note-1"><span class="mw-cite-backlink"><b><a href="#cite_ref-1">^</a></b></span> <span class="reference-text"><style data-mw-deduplicate="TemplateStyles:r1238218222">
/* start https://en.wikipedia.org/ */


.mw-parser-output cite.citation{font-style:inherit;word-wrap:break-word}.mw-parser-output .citation q{quotes:"\"""\"""'""'"}.mw-parser-output .citation:target{background-color:rgba(0,127,255,0.133)}.mw-parser-output .id-lock-free.id-lock-free a{background:url("./mw/Lock-green.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-limited.id-lock-limited a,.mw-parser-output .id-lock-registration.id-lock-registration a{background:url("./mw/Lock-gray-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-subscription.id-lock-subscription a{background:url("./mw/Lock-red-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .cs1-ws-icon a{background:url("./mw/Wikisource-logo.svg")right 0.1em center/12px no-repeat}body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-free a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-limited a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-registration a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-subscription a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .cs1-ws-icon a{background-size:contain;padding:0 1em 0 0}.mw-parser-output .cs1-code{color:inherit;background:inherit;border:none;padding:inherit}.mw-parser-output .cs1-hidden-error{display:none;color:var(--color-error,#d33)}.mw-parser-output .cs1-visible-error{color:var(--color-error,#d33)}.mw-parser-output .cs1-maint{display:none;color:#085;margin-left:0.3em}.mw-parser-output .cs1-kern-left{padding-left:0.2em}.mw-parser-output .cs1-kern-right{padding-right:0.2em}.mw-parser-output .citation .mw-selflink{font-weight:inherit}@media screen{.mw-parser-output .cs1-format{font-size:95%}html.skin-theme-clientpref-night .mw-parser-output .cs1-maint{color:#18911f}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .cs1-maint{color:#18911f}}


/* end https://en.wikipedia.org/ */
</style><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://web.archive.org/web/20100916052854/http://psoug.org/snippet/Oracle-PL-SQL-INSERT-ALL_589.htm">"Oracle PL/SQL: INSERT ALL"</a>. <i>psoug.org</i>. Archived from <a rel="nofollow" class="external text" href="http://psoug.org/snippet/Oracle-PL-SQL-INSERT-ALL_589.htm">the original</a> on 2010-09-16<span class="reference-accessdate">. Retrieved <span class="nowrap">2010-09-02</span></span>.</cite></span>
</li>
<li id="cite_note-2"><span class="mw-cite-backlink"><b><a href="#cite_ref-2">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://www.firebirdsql.org/file/documentation/reference_manuals/reference_material/html/langrefupd25-insert.html#langrefupd25-insert-returning">"Firebird 2.5 Language Reference Update"</a><span class="reference-accessdate">. Retrieved <span class="nowrap">2011-10-24</span></span>.</cite></span>
</li>
<li id="cite_note-3"><span class="mw-cite-backlink"><b><a href="#cite_ref-3">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://firebirdsql.su/doku.php?id=returning">"Firebird SQL Language Dictionary"</a>.</cite></span>
</li>
</ol></div></div>
<div class="mw-heading mw-heading2"><h2 id="External_links">External links</h2></div>
<ul><li><a rel="nofollow" class="external text" href="https://web.archive.org/web/20090915172636/http://download.oracle.com/docs/cd/E11882_01/server.112/e10592/statements_9014.htm">Oracle SQL INSERT statement (Oracle Database SQL Language Reference, 11g Release 2 (11.2) on oracle.com)</a></li>
<li><a rel="nofollow" class="external text" href="https://www.fmsinc.com/MicrosoftAccess/query/snytax/append-query.html">Microsoft Access Append Query Examples and SQL INSERT Query Syntax</a></li>
<li><a rel="nofollow" class="external text" href="https://dev.mysql.com/doc/refman/5.5/en/insert.html">MySQL <span class="monospaced">INSERT</span> statement (MySQL 5.5 Reference Manual)</a></li></ul>
<div class="navbox-styles"><style data-mw-deduplicate="TemplateStyles:r1129693374">
/* start https://en.wikipedia.org/ */


.mw-parser-output .hlist dl,.mw-parser-output .hlist ol,.mw-parser-output .hlist ul{margin:0;padding:0}.mw-parser-output .hlist dd,.mw-parser-output .hlist dt,.mw-parser-output .hlist li{margin:0;display:inline}.mw-parser-output .hlist.inline,.mw-parser-output .hlist.inline dl,.mw-parser-output .hlist.inline ol,.mw-parser-output .hlist.inline ul,.mw-parser-output .hlist dl dl,.mw-parser-output .hlist dl ol,.mw-parser-output .hlist dl ul,.mw-parser-output .hlist ol dl,.mw-parser-output .hlist ol ol,.mw-parser-output .hlist ol ul,.mw-parser-output .hlist ul dl,.mw-parser-output .hlist ul ol,.mw-parser-output .hlist ul ul{display:inline}.mw-parser-output .hlist .mw-empty-li{display:none}.mw-parser-output .hlist dt::after{content:": "}.mw-parser-output .hlist dd::after,.mw-parser-output .hlist li::after{content:" ยท ";font-weight:bold}.mw-parser-output .hlist dd:last-child::after,.mw-parser-output .hlist dt:last-child::after,.mw-parser-output .hlist li:last-child::after{content:none}.mw-parser-output .hlist dd dd:first-child::before,.mw-parser-output .hlist dd dt:first-child::before,.mw-parser-output .hlist dd li:first-child::before,.mw-parser-output .hlist dt dd:first-child::before,.mw-parser-output .hlist dt dt:first-child::before,.mw-parser-output .hlist dt li:first-child::before,.mw-parser-output .hlist li dd:first-child::before,.mw-parser-output .hlist li dt:first-child::before,.mw-parser-output .hlist li li:first-child::before{content:" (";font-weight:normal}.mw-parser-output .hlist dd dd:last-child::after,.mw-parser-output .hlist dd dt:last-child::after,.mw-parser-output .hlist dd li:last-child::after,.mw-parser-output .hlist dt dd:last-child::after,.mw-parser-output .hlist dt dt:last-child::after,.mw-parser-output .hlist dt li:last-child::after,.mw-parser-output .hlist li dd:last-child::after,.mw-parser-output .hlist li dt:last-child::after,.mw-parser-output .hlist li li:last-child::after{content:")";font-weight:normal}.mw-parser-output .hlist ol{counter-reset:listitem}.mw-parser-output .hlist ol>li{counter-increment:listitem}.mw-parser-output .hlist ol>li::before{content:" "counter(listitem)"\a0 "}.mw-parser-output .hlist dd ol>li:first-child::before,.mw-parser-output .hlist dt ol>li:first-child::before,.mw-parser-output .hlist li ol>li:first-child::before{content:" ("counter(listitem)"\a0 "}


/* end https://en.wikipedia.org/ */
</style><style data-mw-deduplicate="TemplateStyles:r1236075235">
/* start https://en.wikipedia.org/ */


.mw-parser-output .navbox{box-sizing:border-box;border:1px solid #a2a9b1;width:100%;clear:both;font-size:88%;text-align:center;padding:1px;margin:1em auto 0}.mw-parser-output .navbox .navbox{margin-top:0}.mw-parser-output .navbox+.navbox,.mw-parser-output .navbox+.navbox-styles+.navbox{margin-top:-1px}.mw-parser-output .navbox-inner,.mw-parser-output .navbox-subgroup{width:100%}.mw-parser-output .navbox-group,.mw-parser-output .navbox-title,.mw-parser-output .navbox-abovebelow{padding:0.25em 1em;line-height:1.5em;text-align:center}.mw-parser-output .navbox-group{white-space:nowrap;text-align:right}.mw-parser-output .navbox,.mw-parser-output .navbox-subgroup{background-color:#fdfdfd}.mw-parser-output .navbox-list{line-height:1.5em;border-color:#fdfdfd}.mw-parser-output .navbox-list-with-group{text-align:left;border-left-width:2px;border-left-style:solid}.mw-parser-output tr+tr>.navbox-abovebelow,.mw-parser-output tr+tr>.navbox-group,.mw-parser-output tr+tr>.navbox-image,.mw-parser-output tr+tr>.navbox-list{border-top:2px solid #fdfdfd}.mw-parser-output .navbox-title{background-color:#ccf}.mw-parser-output .navbox-abovebelow,.mw-parser-output .navbox-group,.mw-parser-output .navbox-subgroup .navbox-title{background-color:#ddf}.mw-parser-output .navbox-subgroup .navbox-group,.mw-parser-output .navbox-subgroup .navbox-abovebelow{background-color:#e6e6ff}.mw-parser-output .navbox-even{background-color:#f7f7f7}.mw-parser-output .navbox-odd{background-color:transparent}.mw-parser-output .navbox .hlist td dl,.mw-parser-output .navbox .hlist td ol,.mw-parser-output .navbox .hlist td ul,.mw-parser-output .navbox td.hlist dl,.mw-parser-output .navbox td.hlist ol,.mw-parser-output .navbox td.hlist ul{padding:0.125em 0}.mw-parser-output .navbox .navbar{display:block;font-size:100%}.mw-parser-output .navbox-title .navbar{float:left;text-align:left;margin-right:0.5em}body.skin--responsive .mw-parser-output .navbox-image img{max-width:none!important}@media print{body.ns-0 .mw-parser-output .navbox{display:none!important}}


/* end https://en.wikipedia.org/ */
</style><style data-mw-deduplicate="TemplateStyles:r920966791">
/* start https://en.wikipedia.org/ */


.mw-parser-output span.smallcaps{font-variant:small-caps}.mw-parser-output span.smallcaps-smaller{font-size:85%}


/* end https://en.wikipedia.org/ */
</style></div><div role="navigation" class="navbox" aria-labelledby="SQL70" style="padding:3px"><table class="nowraplinks mw-collapsible autocollapse navbox-inner" style="border-spacing:0;background:transparent;color:inherit"><tbody><tr><th scope="col" class="navbox-title" colspan="2"><style data-mw-deduplicate="TemplateStyles:r1239400231">
/* start https://en.wikipedia.org/ */


.mw-parser-output .navbar{display:inline;font-size:88%;font-weight:normal}.mw-parser-output .navbar-collapse{float:left;text-align:left}.mw-parser-output .navbar-boxtext{word-spacing:0}.mw-parser-output .navbar ul{display:inline-block;white-space:nowrap;line-height:inherit}.mw-parser-output .navbar-brackets::before{margin-right:-0.125em;content:"[ "}.mw-parser-output .navbar-brackets::after{margin-left:-0.125em;content:" ]"}.mw-parser-output .navbar li{word-spacing:-0.125em}.mw-parser-output .navbar a>span,.mw-parser-output .navbar a>abbr{text-decoration:inherit}.mw-parser-output .navbar-mini abbr{font-variant:small-caps;border-bottom:none;text-decoration:none;cursor:inherit}.mw-parser-output .navbar-ct-full{font-size:114%;margin:0 7em}.mw-parser-output .navbar-ct-mini{font-size:114%;margin:0 4em}html.skin-theme-clientpref-night .mw-parser-output .navbar li a abbr{color:var(--color-base)!important}@media(prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .navbar li a abbr{color:var(--color-base)!important}}@media print{.mw-parser-output .navbar{display:none!important}}


/* end https://en.wikipedia.org/ */
</style><div id="SQL70" style="font-size:114%;margin:0 4em"><a href="SQL" title="SQL">SQL</a></div></th></tr><tr><th scope="row" class="navbox-group" style="width:1%">Versions</th><td class="navbox-list-with-group navbox-list navbox-odd hlist" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="SEQUEL" class="mw-redirect" title="SEQUEL">SEQUEL</a></li>
<li>SQL-86</li>
<li>SQL-89</li>
<li><a href="SQL-92" title="SQL-92">SQL-92</a></li>
<li><a href="SQL%3A1999" title="SQL:1999">SQL:1999</a></li>
<li><a href="SQL%3A2003" title="SQL:2003">SQL:2003</a></li>
<li><a href="SQL%3A2006" title="SQL:2006">SQL:2006</a></li>
<li><a href="SQL%3A2008" title="SQL:2008">SQL:2008</a></li>
<li><a href="SQL%3A2011" title="SQL:2011">SQL:2011</a></li>
<li><a href="SQL%3A2016" title="SQL:2016">SQL:2016</a></li>
<li><a href="SQL%3A2023" title="SQL:2023">SQL:2023</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="SQL_reserved_words" class="mw-redirect" title="SQL reserved words">Keywords</a></th><td class="navbox-list-with-group navbox-list navbox-even hlist" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><span class="smallcaps"><a href="Alias_(SQL)" title="Alias (SQL)">As</a></span></li>
<li><span class="smallcaps"><a href="Case_(SQL)" class="mw-redirect" title="Case (SQL)">Case</a></span></li>
<li><span class="smallcaps"><a href="Create_(SQL)" class="mw-redirect" title="Create (SQL)">Create</a></span></li>
<li><span class="smallcaps"><a href="Delete_(SQL)" title="Delete (SQL)">Delete</a></span></li>
<li><span class="smallcaps"><a href="From_(SQL)" title="From (SQL)">From</a></span></li>
<li><span class="smallcaps"><a href="Group_by_(SQL)" title="Group by (SQL)">Group by</a></span></li>
<li><span class="smallcaps"><a href="Having_(SQL)" title="Having (SQL)">Having</a></span></li>
<li></li>
<li><span class="smallcaps"><a href="Join_(SQL)" title="Join (SQL)">Join</a></span></li>
<li><span class="smallcaps"><a href="Merge_(SQL)" title="Merge (SQL)">Merge</a></span></li>
<li><span class="smallcaps"><a href="Null_(SQL)" title="Null (SQL)">Null</a></span></li>
<li><span class="smallcaps"><a href="Order_by" title="Order by">Order by</a></span></li>
<li><span class="smallcaps"><a href="Window_function_(SQL)" title="Window function (SQL)">Over</a></span></li>
<li><span class="smallcaps"><a href="Prepare_(SQL)" class="mw-redirect" title="Prepare (SQL)">Prepare</a></span></li>
<li><span class="smallcaps"><a href="Select_(SQL)" title="Select (SQL)">Select</a></span></li>
<li><span class="smallcaps"><a href="Truncate_(SQL)" title="Truncate (SQL)">Truncate</a></span></li>
<li><span class="smallcaps"><a href="Set_operations_(SQL)" title="Set operations (SQL)">Union</a></span></li>
<li><span class="smallcaps"><a href="Update_(SQL)" title="Update (SQL)">Update</a></span></li>
<li><span class="smallcaps"><a href="With_(SQL)" class="mw-redirect" title="With (SQL)">With</a></span></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">Related</th><td class="navbox-list-with-group navbox-list navbox-odd hlist" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Edgar_F._Codd" title="Edgar F. Codd">Edgar Codd</a></li>
<li><a href="Relational_database" title="Relational database">Relational database</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">ISO/IEC SQL parts</th><td class="navbox-list-with-group navbox-list navbox-even hlist" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li>Framework</li>
<li>Foundation</li>
<li><a href="SQL/CLI" class="mw-redirect" title="SQL/CLI">Call-Level Interface</a></li>
<li><a href="SQL/PSM" title="SQL/PSM">Persistent Stored Modules</a></li>
<li><a href="SQL/MED" title="SQL/MED">Management of External Data</a></li>
<li><a href="SQL/OLB" title="SQL/OLB">Object Language Bindings</a></li>
<li><a href="SQL/Schemata" title="SQL/Schemata">Information and Definition Schemas</a></li>
<li><a href="SQL/JRT" title="SQL/JRT">SQL Routines and Types for the Java Programming Language</a></li>
<li><a href="SQL/XML" title="SQL/XML">XML-Related Specifications</a></li></ul>
</div></td></tr></tbody></table></div></div><!--htdig_noindex--><div><div class="zim-footer">
This article is issued from <a class="external text" title="Last edited on 2025-06-30" href="https://en.wikipedia.org/wiki/?title=Insert_(SQL)&amp;oldid=1298012856">Wikipedia</a>. The text is available under <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.en">Creative Commons Attribution-Share Alike 4.0</a> unless otherwise noted. Additional terms may apply for the media files.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>

</body></html>